package com.itwill.ecom.cart;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.itwill.ecom.member.MemberBeans;
import com.itwill.ecom.member.MemberService;
import com.itwill.ecom.orders.OrdersBeans;
import com.itwill.ecom.product.ProductBeans;
import com.itwill.ecom.product.ProductService;

@Controller
@RequestMapping(value = "/cart")
public class CartController {

	@Autowired
	private CartService cart_service;
	@Autowired
	private MemberService member_service;
	@Autowired
	private ProductService product_service;

	public CartController() {
		System.out
				.println("△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△△CartController 생성자△");
	}

	// 카트 폼 호출~
	@RequestMapping(value = "/cartform")
	public String cart_form() {
		return "cart/cart_form";
	}

	// 카트리스트 호출 시 이루어지는 첫 작업~
	@RequestMapping(value = "/cartformJSON", method = RequestMethod.GET)
	public @ResponseBody List<CartBeans> cartForm(HttpSession session,
			HttpServletRequest request, Model model) {
		// @ResponseBody List<CartBeans>를 사용하여 자동으로 jSON타입으로 보내준다~
		List<CartBeans> product_list = new ArrayList<CartBeans>();
		// 사용자 no를 받아오자~
		String s_noStr = String.valueOf(session.getAttribute("sno"));
		int s_no = 0;
		if (s_noStr.equals("") || s_noStr.equals(null)) {

		} else {

			s_no = Integer.parseInt(s_noStr);

		}

		System.out.println("카트리스트 s_no:" + s_no);
		try {
			// 카트 리스트를 실어준다~~(카트번호,멤버번호,물품번호,수량)
			List<CartBeans> list = cart_service.getCartListByMemberNo(s_no);
			// model.addAttribute("cart_list", list);

			// 해당 카트의 물품 리스트도 실어줘야한다..

			ProductBeans product = null; // 객체선언~
			CartBeans cart_product = null; // 객체선언~
			for (CartBeans cartBean : list) { // 향상된 for문 (받으려는 객체타입 : for문 돌아갈
												// 객체)
				// 카트 리스트에서 product_no를 순서대로 빼와서 해당 물품 정보를 받아낸다..
				product = product_service.getProductByNo(cartBean.getCart_product());
				System.out.println("카트리스트의 프로덕트~:" + product.getProduct_name());

				// 카트+프로덕트 뷰를 만들때만 사용하는 생성자에 모든 값을 담아준다
				cart_product = new CartBeans(cartBean.getCart_no(),
						cartBean.cart_member, cartBean.cart_product,
						cartBean.cart_count, product.getProduct_name(),
						product.getProduct_price(), product.getProduct_image0());
				System.out.println("카트리스트 프로덕트빈~:"
						+ cart_product.getProduct_name());
				// 리스트에 CartBean을 계속 넣어준다
				product_list.add(cart_product);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		// 모든 정보를 담은 리스트를 보내준다~
		return product_list;

	}

	@RequestMapping(value = "/cart_product_Detail", method = RequestMethod.GET)
	public String detail() {
		System.out.println(">>>>>>>>>>>>>>>>디테일 진입");
		return "product/product_detail";
	}

	@RequestMapping(value = "/detailJSON", method = RequestMethod.GET)
	public String detailPageJSON() {
		System.out.println("########### 상품상세 페이지 JSON요청");
		return "product/product_detailJSON";
	}

	// //////////// 선택 카트리스트 삭제하는 컨트롤러입니다~~~~ /////////////////
	@RequestMapping(value = "/delete_cart")
	public @ResponseBody List<CartBeans> deletePageJSON(HttpSession session,
			@RequestParam("cart_no") int cart_no, Model model,
			HttpServletRequest request) {

		// 사용자 no를 받아오자~
		String s_noStr = String.valueOf(session.getAttribute("sno"));
		int s_no = Integer.parseInt(s_noStr);
		List<CartBeans> list = null;
		List<CartBeans> product_list = new ArrayList<CartBeans>();
		// 카트 no를 받아오자~(ajax를 통해서 여기로 보내준다~request.getParameter로 받자~
		// int cart_no=Integer.parseInt(request.getParameter("cart_no"));

		System.out.println("카트 딜리트 폼입니다~");
		try {

			// 받은 cart_no를 통해 해당 카트목록을 제거해준다~
			cart_service.deleteCart(cart_no);

			// 해당 카트 내역 삭제 후 새로운 리스트를 받아서 list에 넣어준다.
			list = cart_service.getCartListByMemberNo(s_no);
			ProductBeans product = null;
			CartBeans cart_product = null;
			for (CartBeans cartBean : list) {

				// 카트 리스트에서 product_no를 순서대로 빼와서 해당 물품 정보를 받아낸다..
				product = product_service.getProductByNo(cartBean.getCart_product());
				System.out.println("카트리스트의 프로덕트~:" + product.getProduct_name());
				cart_product = new CartBeans(cartBean.getCart_no(),
						cartBean.cart_member, cartBean.cart_product,
						cartBean.cart_count, product.getProduct_name(),
						product.getProduct_price(), product.getProduct_image0());
				System.out.println("카트리스트 프로덕트빈~:"
						+ cart_product.getProduct_name());
				product_list.add(cart_product);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return product_list;
	}

	// //////////// 선택 카트리스트 삭제하는 컨트롤러 끗~~~~ /////////////////

	@RequestMapping("/cartjsontest")
	public String jsontest() {
		return "cart/jsontest";
	}

	@RequestMapping(value = "/test")
	public String test() {
		return "cart/test";
	}

	@RequestMapping(value = "/test_action")
	public String test_action() {
		return "cart/test_action";
	}

	@RequestMapping(value = "/home", method = RequestMethod.GET)
	public String create(Model model, HttpSession session) {
		session.setAttribute("sid", "master");

		String sid = (String) session.getAttribute("sid");
		MemberBeans member = null;
		try {
			member = member_service.getMemberById(sid);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		model.addAttribute("member", member);
		return "/orders/orders_home";
	}

	// 카트 업데이트
	@SuppressWarnings("unused")
	@RequestMapping(value = "/update_cart")
	public @ResponseBody int update_cart_count(
			@RequestParam("cart_no") int cart_no,
			@RequestParam("cart_count") int cart_count, Model model,
			HttpServletRequest request) {
		int update_total=0;
		try{
		//카트 서비스를 호출하여 DB에 수정된 내용을 업뎃해준다~
		cart_service.updateCart(new CartBeans(cart_no, 1, 1, cart_count));
		//해당 cart_no를 통해 카트 정보를 눌러주고
		CartBeans cartBean = cart_service.getCart(cart_no);
		//카트내의 물품번호를 통해 물품정보를 받아온다.
		ProductBeans productBean = product_service.getProductByNo(cartBean.getCart_product());
		//받아온 count와 물품 가격을 곱해서 총액을 구해준다 
		update_total=cart_count*productBean.getProduct_price();
		
		}catch(Exception e){
			e.printStackTrace();
		}
		//총액정보를 리턴해준다..json에서 받을때는 update_total로 받아야한다.
		return update_total;
	}

	@RequestMapping(value = "/total_list_cart")
	public String total_list_cart() {
		System.out.println("토탈 리스트 카트");
		return "cart/cart_total";
	}

}
